{"version":3,"file":"static/chunks/pages/exchange/swap/[[...tokens]]-19c13c3bc2ab83cc.js","mappings":"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","sources":["webpack://_N_E/./src/components/AddressInputPanel/index.tsx","webpack://_N_E/./src/components/ProgressSteps/index.tsx","webpack://_N_E/./src/features/legacy/swap/FormattedPriceImpact.tsx","webpack://_N_E/./src/features/legacy/swap/SwapRoute.tsx","webpack://_N_E/./src/hooks/useIsArgentWallet.ts","webpack://_N_E/./src/hooks/useParsedQueryString.ts","webpack://_N_E/./src/hooks/useSwapSlippageTollerence.ts","webpack://_N_E/./src/hooks/useUSDCPrice.ts","webpack://_N_E/./src/hooks/useV2Trades.ts","webpack://_N_E/./src/hooks/useAllCurrencyCombinations.ts","webpack://_N_E/./src/modals/TokenWarningModal/index.tsx","webpack://_N_E/./src/features/legacy/swap/styleds.tsx","webpack://_N_E/./src/state/swap/hooks.ts","webpack://_N_E/./src/hooks/useWrapCallback.ts","webpack://_N_E/./src/features/legacy/swap/SwapModalFooter.tsx","webpack://_N_E/./src/features/legacy/swap/AdvancedSwapDetails.tsx","webpack://_N_E/./src/features/legacy/swap/TradePrice.tsx","webpack://_N_E/./src/features/legacy/swap/SwapModalHeader.tsx","webpack://_N_E/./src/features/legacy/swap/ConfirmSwapModal.tsx","webpack://_N_E/./src/functions/approveAmountCalldata.ts","webpack://_N_E/./src/hooks/useSwapCallback.ts","webpack://_N_E/./src/hooks/useArgentWalletContract.ts","webpack://_N_E/./src/components/Banner/index.tsx","webpack://_N_E/./src/pages/exchange/swap/[[...tokens]].tsx","webpack://_N_E/./src/features/legacy/swap/confirmPriceImpactWithoutFee.ts","webpack://_N_E/?9897"],"sourcesContent":["import React, { FC, useCallback } from 'react'\n\nimport Input from '../Input'\nimport { t } from '@lingui/macro'\nimport useENS from '../../hooks/useENS'\nimport { useLingui } from '@lingui/react'\n\ninterface AddressInputPanelProps {\n id?: string\n value: string\n onChange: (value: string) => void\n}\n\nconst AddressInputPanel: FC = ({ id, value, onChange }) => {\n const { i18n } = useLingui()\n const { address, loading } = useENS(value)\n\n const handleInput = useCallback(\n (event) => {\n const input = event.target.value\n const withoutSpaces = input.replace(/\\s+/g, '')\n onChange(withoutSpaces)\n },\n [onChange]\n )\n\n const error = Boolean(value.length > 0 && !loading && !address)\n\n return (\n \n
\n {i18n._(t`Send to:`)}\n onChange(null)}>\n {i18n._(t`Remove`)}\n \n
\n
\n \n
\n \n )\n}\n\nexport default AddressInputPanel\n","import React from 'react'\nimport { classNames } from '../../functions'\n\ninterface ProgressCirclesProps {\n steps: boolean[]\n disabled?: boolean\n}\n\n/**\n * Based on array of steps, create a step counter of circles.\n * A circle can be enabled, disabled, or confirmed. States are derived\n * from previous step.\n *\n * An extra circle is added to represent the ability to swap, add, or remove.\n * This step will never be marked as complete (because no 'txn done' state in body ui).\n *\n * @param steps array of booleans where true means step is complete\n */\nexport default function ProgressCircles({ steps, disabled = false, ...rest }: ProgressCirclesProps) {\n return (\n
\n
\n {steps.map((step, i) => {\n return (\n
\n \n {step ? '✓' : i + 1}\n
\n \n {/* */}\n
\n )\n })}\n \n {steps.length + 1}\n
\n \n \n )\n}\n","import { ONE_BIPS } from '../../../constants'\nimport { Percent } from '@sushiswap/core-sdk'\nimport React from 'react'\nimport { warningSeverity } from '../../../functions/prices'\n\nconst SEVERITY = {\n 0: 'text-green',\n 1: 'text-high-emphesis',\n 2: 'text-yellow',\n 3: 'text-red',\n 4: 'text-red',\n}\n\nexport default function FormattedPriceImpact({ priceImpact }: { priceImpact?: Percent }) {\n return (\n
\n {priceImpact ? `${priceImpact.multiply(-1).toFixed(2)}%` : '-'}\n
\n )\n}\n","import { Currency, Trade, TradeType } from '@sushiswap/core-sdk'\nimport React, { Fragment, memo } from 'react'\n\nimport { ChevronRightIcon } from '@heroicons/react/outline'\nimport { unwrappedToken } from '../../../functions/currency/wrappedCurrency'\n\nconst SwapRoute = memo(({ trade }: { trade: Trade }) => {\n return (\n
\n {trade.route.path.map((token, i, path) => {\n const isLastItem: boolean = i === path.length - 1\n const currency = unwrappedToken(token)\n return (\n \n
\n
{currency.symbol}
\n
\n {isLastItem ? null : }\n
\n )\n })}\n
\n )\n})\n\nSwapRoute.displayName = 'SwapRoute'\n\nexport default SwapRoute\n","import { NEVER_RELOAD, useSingleCallResult } from '../state/multicall/hooks'\n\nimport { useActiveWeb3React } from '../services/web3'\nimport { useArgentWalletDetectorContract } from './useContract'\nimport { useMemo } from 'react'\n\nexport default function useIsArgentWallet(): boolean {\n const { account } = useActiveWeb3React()\n const argentWalletDetector = useArgentWalletDetectorContract()\n const inputs = useMemo(() => [account ?? undefined], [account])\n const call = useSingleCallResult(argentWalletDetector, 'isArgentWallet', inputs, NEVER_RELOAD)\n return call?.result?.[0] ?? false\n}\n","import { ParsedQs, parse } from 'qs'\n\nimport { useMemo } from 'react'\n\nexport default function useParsedQueryString(): ParsedQs {\n // const { search } = useLocation()\n const search = location.search\n return useMemo(\n () => (search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}),\n [search]\n )\n}\n","import { Currency, Percent, Trade, TradeType } from '@sushiswap/core-sdk'\n\nimport { useMemo } from 'react'\nimport { useUserSlippageToleranceWithDefault } from '../state/user/hooks'\n\nconst V2_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10_000) // .50%\nconst ONE_TENTHS_PERCENT = new Percent(10, 10_000) // .10%\n\nexport default function useSwapSlippageTolerance(trade: Trade | undefined): Percent {\n const defaultSlippageTolerance = useMemo(() => {\n if (!trade) return ONE_TENTHS_PERCENT\n return V2_SWAP_DEFAULT_SLIPPAGE\n }, [trade])\n return useUserSlippageToleranceWithDefault(defaultSlippageTolerance)\n}\n","import { ChainId, Currency, CurrencyAmount, Price, Token, USD } from '@sushiswap/core-sdk'\n\nimport { useActiveWeb3React } from '../services/web3'\nimport { useMemo } from 'react'\nimport { useV2TradeExactOut } from './useV2Trades'\n\n// import { wrappedCurrency } from \"../functions/currency/wrappedCurrency\";\n\n// Stablecoin amounts used when calculating spot price for a given currency.\n// The amount is large enough to filter low liquidity pairs.\nconst STABLECOIN_AMOUNT_OUT: { [chainId: number]: CurrencyAmount } = {\n [ChainId.ETHEREUM]: CurrencyAmount.fromRawAmount(USD[ChainId.ETHEREUM], 100_000e6),\n [ChainId.ROPSTEN]: CurrencyAmount.fromRawAmount(USD[ChainId.ROPSTEN], 100_000e6),\n [ChainId.KOVAN]: CurrencyAmount.fromRawAmount(USD[ChainId.KOVAN], 100_000e6),\n [ChainId.MATIC]: CurrencyAmount.fromRawAmount(USD[ChainId.MATIC], 100_000e6),\n [ChainId.FANTOM]: CurrencyAmount.fromRawAmount(USD[ChainId.FANTOM], 100_000e6),\n [ChainId.BSC]: CurrencyAmount.fromRawAmount(USD[ChainId.BSC], 100_000e18),\n [ChainId.HARMONY]: CurrencyAmount.fromRawAmount(USD[ChainId.HARMONY], 100_000e6),\n [ChainId.HECO]: CurrencyAmount.fromRawAmount(USD[ChainId.HECO], 100_000e6),\n [ChainId.OKEX]: CurrencyAmount.fromRawAmount(USD[ChainId.OKEX], 100_000e18),\n [ChainId.XDAI]: CurrencyAmount.fromRawAmount(USD[ChainId.XDAI], 100_000e6),\n [ChainId.ARBITRUM]: CurrencyAmount.fromRawAmount(USD[ChainId.ARBITRUM], 100_000e6),\n [ChainId.CELO]: CurrencyAmount.fromRawAmount(USD[ChainId.CELO], 100_000e18),\n [ChainId.MOONRIVER]: CurrencyAmount.fromRawAmount(USD[ChainId.MOONRIVER], 100_000e6),\n}\n\n/**\n * Returns the price in USDC of the input currency\n * @param currency currency to compute the USDC price of\n */\nexport default function useUSDCPrice(currency?: Currency): Price | undefined {\n const { chainId } = useActiveWeb3React()\n\n const amountOut = chainId ? STABLECOIN_AMOUNT_OUT[chainId] : undefined\n const stablecoin = amountOut?.currency\n\n const v2USDCTrade = useV2TradeExactOut(currency, amountOut, {\n maxHops: 3,\n })\n\n return useMemo(() => {\n if (!currency || !stablecoin) {\n return undefined\n }\n\n // handle usdc\n if (currency?.wrapped.equals(stablecoin)) {\n return new Price(stablecoin, stablecoin, '1', '1')\n }\n\n // use v2 price if available\n if (v2USDCTrade) {\n const { numerator, denominator } = v2USDCTrade.route.midPrice\n return new Price(currency, stablecoin, denominator, numerator)\n }\n\n return undefined\n }, [currency, stablecoin, v2USDCTrade])\n}\n\nexport function useUSDCValue(currencyAmount: CurrencyAmount | undefined | null) {\n const price = useUSDCPrice(currencyAmount?.currency)\n\n return useMemo(() => {\n if (!price || !currencyAmount) return null\n try {\n return price.quote(currencyAmount)\n } catch (error) {\n return null\n }\n }, [currencyAmount, price])\n}\n","import { Currency, CurrencyAmount, Pair, Trade, TradeType } from '@sushiswap/core-sdk'\nimport { PairState, useV2Pairs } from './useV2Pairs'\n\nimport { BETTER_TRADE_LESS_HOPS_THRESHOLD } from '../constants'\nimport { isTradeBetter } from '../functions/trade'\nimport { useAllCurrencyCombinations } from './useAllCurrencyCombinations'\nimport { useMemo } from 'react'\n\nfunction useAllCommonPairs(currencyA?: Currency, currencyB?: Currency): Pair[] {\n const allCurrencyCombinations = useAllCurrencyCombinations(currencyA, currencyB)\n\n const allPairs = useV2Pairs(allCurrencyCombinations)\n\n // only pass along valid pairs, non-duplicated pairs\n return useMemo(\n () =>\n Object.values(\n allPairs\n // filter out invalid pairs\n .filter((result): result is [PairState.EXISTS, Pair] => Boolean(result[0] === PairState.EXISTS && result[1]))\n // filter out duplicated pairs\n .reduce<{ [pairAddress: string]: Pair }>((memo, [, curr]) => {\n memo[curr.liquidityToken.address] = memo[curr.liquidityToken.address] ?? curr\n return memo\n }, {})\n ),\n [allPairs]\n )\n}\n\nconst MAX_HOPS = 3\n\n/**\n * Returns the best trade for the exact amount of tokens in to the given token out\n */\nexport function useV2TradeExactIn(\n currencyAmountIn?: CurrencyAmount,\n currencyOut?: Currency,\n { maxHops = MAX_HOPS } = {}\n): Trade | null {\n const allowedPairs = useAllCommonPairs(currencyAmountIn?.currency, currencyOut)\n\n return useMemo(() => {\n if (currencyAmountIn && currencyOut && allowedPairs.length > 0) {\n if (maxHops === 1) {\n return (\n Trade.bestTradeExactIn(allowedPairs, currencyAmountIn, currencyOut, {\n maxHops: 1,\n maxNumResults: 1,\n })[0] ?? null\n )\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: Trade | null = null\n for (let i = 1; i <= maxHops; i++) {\n const currentTrade: Trade | null =\n Trade.bestTradeExactIn(allowedPairs, currencyAmountIn, currencyOut, {\n maxHops: i,\n maxNumResults: 1,\n })[0] ?? null\n // if current trade is best yet, save it\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade\n }\n }\n return bestTradeSoFar\n }\n\n return null\n }, [allowedPairs, currencyAmountIn, currencyOut, maxHops])\n}\n\n/**\n * Returns the best trade for the token in to the exact amount of token out\n */\nexport function useV2TradeExactOut(\n currencyIn?: Currency,\n currencyAmountOut?: CurrencyAmount,\n { maxHops = MAX_HOPS } = {}\n): Trade | null {\n const allowedPairs = useAllCommonPairs(currencyIn, currencyAmountOut?.currency)\n\n return useMemo(() => {\n if (currencyIn && currencyAmountOut && allowedPairs.length > 0) {\n if (maxHops === 1) {\n return (\n Trade.bestTradeExactOut(allowedPairs, currencyIn, currencyAmountOut, {\n maxHops: 1,\n maxNumResults: 1,\n })[0] ?? null\n )\n }\n // search through trades with varying hops, find best trade out of them\n let bestTradeSoFar: Trade | null = null\n for (let i = 1; i <= maxHops; i++) {\n const currentTrade =\n Trade.bestTradeExactOut(allowedPairs, currencyIn, currencyAmountOut, {\n maxHops: i,\n maxNumResults: 1,\n })[0] ?? null\n if (isTradeBetter(bestTradeSoFar, currentTrade, BETTER_TRADE_LESS_HOPS_THRESHOLD)) {\n bestTradeSoFar = currentTrade\n }\n }\n return bestTradeSoFar\n }\n return null\n }, [currencyIn, currencyAmountOut, allowedPairs, maxHops])\n}\n","import { ADDITIONAL_BASES, BASES_TO_CHECK_TRADES_AGAINST, CUSTOM_BASES } from '../config/routing'\nimport { Currency, Token } from '@sushiswap/core-sdk'\n\nimport flatMap from 'lodash/flatMap'\nimport { useActiveWeb3React } from '../services/web3'\nimport { useMemo } from 'react'\n\nexport function useAllCurrencyCombinations(currencyA?: Currency, currencyB?: Currency): [Token, Token][] {\n const { chainId } = useActiveWeb3React()\n\n const [tokenA, tokenB] = chainId ? [currencyA?.wrapped, currencyB?.wrapped] : [undefined, undefined]\n\n const bases: Token[] = useMemo(() => {\n if (!chainId) return []\n\n const common = BASES_TO_CHECK_TRADES_AGAINST[chainId] ?? []\n const additionalA = tokenA ? ADDITIONAL_BASES[chainId]?.[tokenA.address] ?? [] : []\n const additionalB = tokenB ? ADDITIONAL_BASES[chainId]?.[tokenB.address] ?? [] : []\n\n return [...common, ...additionalA, ...additionalB]\n }, [chainId, tokenA, tokenB])\n\n const basePairs: [Token, Token][] = useMemo(\n () => flatMap(bases, (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])),\n [bases]\n )\n\n return useMemo(\n () =>\n tokenA && tokenB\n ? [\n // the direct pair\n [tokenA, tokenB],\n // token A against all bases\n ...bases.map((base): [Token, Token] => [tokenA, base]),\n // token B against all bases\n ...bases.map((base): [Token, Token] => [tokenB, base]),\n // each base against all bases\n ...basePairs,\n ]\n .filter((tokens): tokens is [Token, Token] => Boolean(tokens[0] && tokens[1]))\n .filter(([t0, t1]) => t0.address !== t1.address)\n .filter(([tokenA, tokenB]) => {\n if (!chainId) return true\n const customBases = CUSTOM_BASES[chainId]\n\n const customBasesA: Token[] | undefined = customBases?.[tokenA.address]\n const customBasesB: Token[] | undefined = customBases?.[tokenB.address]\n\n if (!customBasesA && !customBasesB) return true\n\n if (customBasesA && !customBasesA.find((base) => tokenB.equals(base))) return false\n if (customBasesB && !customBasesB.find((base) => tokenA.equals(base))) return false\n\n return true\n })\n : [],\n [tokenA, tokenB, bases, basePairs, chainId]\n )\n}\n","import React, { useCallback } from 'react'\n\nimport { ImportToken } from '../SearchModal/ImportToken'\nimport Modal from '../../components/Modal'\nimport { Token } from '@sushiswap/core-sdk'\n\nexport default function TokenWarningModal({\n isOpen,\n tokens,\n onConfirm,\n}: {\n isOpen: boolean\n tokens: Token[]\n onConfirm: () => void\n}) {\n const handleDismiss = useCallback(() => null, [])\n\n return (\n \n \n \n )\n}\n","import React, { ReactNode } from 'react'\nimport styled, { css } from 'styled-components'\n\nimport { AlertTriangle } from 'react-feather'\nimport Slider from 'rc-slider'\n\nexport const ArrowWrapper = styled.div<{ clickable: boolean }>`\n padding: 2px;\n\n ${({ clickable }) =>\n clickable\n ? css`\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n `\n : null}\n`\n\nexport const BottomGrouping = styled.div`\n margin-top: 1rem;\n`\n\nexport function SwapCallbackError({ error }: { error: ReactNode }) {\n return (\n
\n \n
{error}
\n
\n )\n}\n\nexport const StyledSlider = styled(Slider)`\n margin: 0.8rem auto 2rem auto;\n width: 95% !important;\n\n .rc-slider-mark-text {\n color: #575757;\n }\n\n .rc-slider-mark-text-active {\n color: #7f7f7f;\n }\n\n .rc-slider-rail {\n background-color: #202231;\n }\n\n .rc-slider-track {\n background: linear-gradient(to right, #27b0e6, #fa52a0);\n }\n\n .rc-slider-handle {\n border-color: #fa52a0;\n }\n\n .rc-slider-handle:hover {\n border-color: #fa52a0;\n }\n\n .rc-slider-handle-click-focused:focus {\n border-color: #fa52a0;\n }\n\n .rc-slider-dot-active {\n border-color: #fa52a0;\n }\n`\n","import { AppDispatch, AppState } from '../index'\nimport {\n ChainId,\n Currency,\n CurrencyAmount,\n JSBI,\n Percent,\n SUSHI_ADDRESS,\n TradeType,\n Trade as V2Trade,\n WNATIVE_ADDRESS,\n} from '@sushiswap/core-sdk'\nimport {\n EstimatedSwapCall,\n SuccessfulCall,\n swapErrorToUserReadableMessage,\n useSwapCallArguments,\n} from '../../hooks/useSwapCallback'\n// import {\n// EstimatedSwapCall,\n// SuccessfulCall,\n// useSwapCallArguments,\n// } from \"../../hooks/useSwapCallback\";\nimport { Field, replaceSwapState, selectCurrency, setRecipient, switchCurrencies, typeInput } from './actions'\nimport { isAddress, isZero } from '../../functions/validate'\nimport { useAppDispatch, useAppSelector } from '../hooks'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useExpertModeManager, useUserSingleHopOnly, useUserSlippageTolerance } from '../user/hooks'\nimport { useV2TradeExactIn as useTradeExactIn, useV2TradeExactOut as useTradeExactOut } from '../../hooks/useV2Trades'\nimport { ParsedQs } from 'qs'\nimport { SwapState } from './reducer'\nimport { t } from '@lingui/macro'\nimport { tryParseAmount } from '../../functions/parse'\nimport { useActiveWeb3React } from '../../services/web3'\nimport { useCurrency } from '../../hooks/Tokens'\nimport { useCurrencyBalances } from '../wallet/hooks'\nimport useENS from '../../hooks/useENS'\nimport { useLingui } from '@lingui/react'\nimport useParsedQueryString from '../../hooks/useParsedQueryString'\nimport useSwapSlippageTolerance from '../../hooks/useSwapSlippageTollerence'\n\nexport function useSwapState(): AppState['swap'] {\n return useAppSelector((state) => state.swap)\n}\n\nexport function useSwapActionHandlers(): {\n onCurrencySelection: (field: Field, currency: Currency) => void\n onSwitchTokens: () => void\n onUserInput: (field: Field, typedValue: string) => void\n onChangeRecipient: (recipient: string | null) => void\n} {\n const dispatch = useAppDispatch()\n const onCurrencySelection = useCallback(\n (field: Field, currency: Currency) => {\n dispatch(\n selectCurrency({\n field,\n currencyId: currency.isToken\n ? currency.address\n : currency.isNative && currency.chainId !== ChainId.CELO\n ? 'ETH'\n : '',\n })\n )\n },\n [dispatch]\n )\n\n const onSwitchTokens = useCallback(() => {\n dispatch(switchCurrencies())\n }, [dispatch])\n\n const onUserInput = useCallback(\n (field: Field, typedValue: string) => {\n dispatch(typeInput({ field, typedValue }))\n },\n [dispatch]\n )\n\n const onChangeRecipient = useCallback(\n (recipient: string | null) => {\n dispatch(setRecipient({ recipient }))\n },\n [dispatch]\n )\n\n return {\n onSwitchTokens,\n onCurrencySelection,\n onUserInput,\n onChangeRecipient,\n }\n}\n\n// TODO: Swtich for ours...\nconst BAD_RECIPIENT_ADDRESSES: { [chainId: string]: { [address: string]: true } } = {\n [ChainId.ETHEREUM]: {\n '0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac': true, // v2 factory\n '0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F': true, // v2 router 02\n },\n}\n\n/**\n * Returns true if any of the pairs or tokens in a trade have the given checksummed address\n * @param trade to check for the given address\n * @param checksummedAddress address to check in the pairs and tokens\n */\nfunction involvesAddress(trade: V2Trade, checksummedAddress: string): boolean {\n const path = trade.route.path\n return (\n path.some((token) => token.address === checksummedAddress) ||\n (trade instanceof V2Trade\n ? trade.route.pairs.some((pair) => pair.liquidityToken.address === checksummedAddress)\n : false)\n )\n}\n\n// from the current swap inputs, compute the best trade and return it.\nexport function useDerivedSwapInfo(doArcher = false): {\n currencies: { [field in Field]?: Currency }\n currencyBalances: { [field in Field]?: CurrencyAmount }\n parsedAmount: CurrencyAmount | undefined\n inputError?: string\n v2Trade: V2Trade | undefined\n allowedSlippage: Percent\n} {\n const { i18n } = useLingui()\n\n const { account, chainId, library } = useActiveWeb3React()\n\n const [singleHopOnly] = useUserSingleHopOnly()\n\n const {\n independentField,\n typedValue,\n [Field.INPUT]: { currencyId: inputCurrencyId },\n [Field.OUTPUT]: { currencyId: outputCurrencyId },\n recipient,\n } = useSwapState()\n\n const inputCurrency = useCurrency(inputCurrencyId)\n\n const outputCurrency = useCurrency(outputCurrencyId)\n\n const recipientLookup = useENS(recipient ?? undefined)\n\n const to: string | null = (recipient === null ? account : recipientLookup.address) ?? null\n\n const relevantTokenBalances = useCurrencyBalances(account ?? undefined, [\n inputCurrency ?? undefined,\n outputCurrency ?? undefined,\n ])\n\n const isExactIn: boolean = independentField === Field.INPUT\n const parsedAmount = tryParseAmount(typedValue, (isExactIn ? inputCurrency : outputCurrency) ?? undefined)\n\n const bestTradeExactIn = useTradeExactIn(isExactIn ? parsedAmount : undefined, outputCurrency ?? undefined, {\n maxHops: singleHopOnly ? 1 : undefined,\n })\n\n const bestTradeExactOut = useTradeExactOut(inputCurrency ?? undefined, !isExactIn ? parsedAmount : undefined, {\n maxHops: singleHopOnly ? 1 : undefined,\n })\n\n const v2Trade = isExactIn ? bestTradeExactIn : bestTradeExactOut\n\n const currencyBalances = {\n [Field.INPUT]: relevantTokenBalances[0],\n [Field.OUTPUT]: relevantTokenBalances[1],\n }\n\n const currencies: { [field in Field]?: Currency } = {\n [Field.INPUT]: inputCurrency ?? undefined,\n [Field.OUTPUT]: outputCurrency ?? undefined,\n }\n\n let inputError: string | undefined\n if (!account) {\n inputError = 'Connect Wallet'\n }\n\n if (!parsedAmount) {\n inputError = inputError ?? i18n._(t`Enter an amount`)\n }\n\n if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) {\n inputError = inputError ?? i18n._(t`Select a token`)\n }\n\n const formattedTo = isAddress(to)\n if (!to || !formattedTo) {\n inputError = inputError ?? i18n._(t`Enter a recipient`)\n } else {\n if (\n BAD_RECIPIENT_ADDRESSES?.[chainId]?.[formattedTo] ||\n (bestTradeExactIn && involvesAddress(bestTradeExactIn, formattedTo)) ||\n (bestTradeExactOut && involvesAddress(bestTradeExactOut, formattedTo))\n ) {\n inputError = inputError ?? i18n._(t`Invalid recipient`)\n }\n }\n\n const allowedSlippage = useSwapSlippageTolerance(v2Trade)\n\n // compare input balance to max input based on version\n const [balanceIn, amountIn] = [currencyBalances[Field.INPUT], v2Trade?.maximumAmountIn(allowedSlippage)]\n\n if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) {\n inputError = i18n._(t`Insufficient ${amountIn.currency.symbol} balance`)\n }\n\n return {\n currencies,\n currencyBalances,\n parsedAmount,\n inputError,\n v2Trade: v2Trade ?? undefined,\n allowedSlippage,\n }\n}\n\nfunction parseCurrencyFromURLParameter(urlParam: any): string {\n if (typeof urlParam === 'string') {\n const valid = isAddress(urlParam)\n if (valid) return valid\n if (urlParam.toUpperCase() === 'ETH') return 'ETH'\n }\n return ''\n}\n\nfunction parseTokenAmountURLParameter(urlParam: any): string {\n return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''\n}\n\nfunction parseIndependentFieldURLParameter(urlParam: any): Field {\n return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT\n}\n\nconst ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\nfunction validatedRecipient(recipient: any): string | null {\n if (typeof recipient !== 'string') return null\n const address = isAddress(recipient)\n if (address) return address\n if (ENS_NAME_REGEX.test(recipient)) return recipient\n if (ADDRESS_REGEX.test(recipient)) return recipient\n return null\n}\nexport function queryParametersToSwapState(parsedQs: ParsedQs, chainId: ChainId = ChainId.ETHEREUM): SwapState {\n let inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency)\n let outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency)\n const eth = chainId === ChainId.CELO ? WNATIVE_ADDRESS[chainId] : 'ETH'\n const sushi = SUSHI_ADDRESS[chainId]\n if (inputCurrency === '' && outputCurrency === '') {\n inputCurrency = eth\n outputCurrency = sushi\n } else if (inputCurrency === '') {\n inputCurrency = outputCurrency === eth ? sushi : eth\n } else if (outputCurrency === '' || inputCurrency === outputCurrency) {\n outputCurrency = inputCurrency === eth ? sushi : eth\n }\n\n const recipient = validatedRecipient(parsedQs.recipient)\n\n return {\n [Field.INPUT]: {\n currencyId: inputCurrency,\n },\n [Field.OUTPUT]: {\n currencyId: outputCurrency,\n },\n typedValue: parseTokenAmountURLParameter(parsedQs.exactAmount),\n independentField: parseIndependentFieldURLParameter(parsedQs.exactField),\n recipient,\n }\n}\n\n// updates the swap state to use the defaults for a given network\nexport function useDefaultsFromURLSearch():\n | {\n inputCurrencyId: string | undefined\n outputCurrencyId: string | undefined\n }\n | undefined {\n const { chainId } = useActiveWeb3React()\n const dispatch = useAppDispatch()\n const parsedQs = useParsedQueryString()\n const [expertMode] = useExpertModeManager()\n const [result, setResult] = useState<\n | {\n inputCurrencyId: string | undefined\n outputCurrencyId: string | undefined\n }\n | undefined\n >()\n\n useEffect(() => {\n if (!chainId) return\n const parsed = queryParametersToSwapState(parsedQs, chainId)\n\n dispatch(\n replaceSwapState({\n typedValue: parsed.typedValue,\n field: parsed.independentField,\n inputCurrencyId: parsed[Field.INPUT].currencyId,\n outputCurrencyId: parsed[Field.OUTPUT].currencyId,\n recipient: expertMode ? parsed.recipient : null,\n })\n )\n\n setResult({\n inputCurrencyId: parsed[Field.INPUT].currencyId,\n outputCurrencyId: parsed[Field.OUTPUT].currencyId,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, chainId])\n\n return result\n}\n","import { ChainId, Currency, NATIVE, WNATIVE } from '@sushiswap/core-sdk'\n\nimport { tryParseAmount } from '../functions/parse'\nimport { useActiveWeb3React } from '../services/web3'\nimport { useCurrencyBalance } from '../state/wallet/hooks'\nimport { useMemo } from 'react'\nimport { useTransactionAdder } from '../state/transactions/hooks'\nimport { useWETH9Contract } from './useContract'\n\nexport enum WrapType {\n NOT_APPLICABLE,\n WRAP,\n UNWRAP,\n}\n\nconst NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }\n/**\n * Given the selected input and output currency, return a wrap callback\n * @param inputCurrency the selected input currency\n * @param outputCurrency the selected output currency\n * @param typedValue the user input value\n */\nexport default function useWrapCallback(\n inputCurrency: Currency | undefined,\n outputCurrency: Currency | undefined,\n typedValue: string | undefined\n): {\n wrapType: WrapType\n execute?: undefined | (() => Promise)\n inputError?: string\n} {\n const { chainId, account } = useActiveWeb3React()\n const wethContract = useWETH9Contract()\n const balance = useCurrencyBalance(account ?? undefined, inputCurrency)\n // we can always parse the amount typed as the input currency, since wrapping is 1:1\n const inputAmount = useMemo(() => tryParseAmount(typedValue, inputCurrency), [inputCurrency, typedValue])\n const addTransaction = useTransactionAdder()\n\n return useMemo(() => {\n if (!wethContract || !chainId || !inputCurrency || !outputCurrency || chainId === ChainId.CELO)\n return NOT_APPLICABLE\n const weth = WNATIVE[chainId]\n if (!weth) return NOT_APPLICABLE\n\n const hasInputAmount = Boolean(inputAmount?.greaterThan('0'))\n const sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount)\n\n if (inputCurrency.isNative && weth.equals(outputCurrency)) {\n return {\n wrapType: WrapType.WRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await wethContract.deposit({\n value: `0x${inputAmount.quotient.toString(16)}`,\n })\n addTransaction(txReceipt, {\n summary: `Wrap ${inputAmount.toSignificant(6)} ${NATIVE[chainId].symbol} to ${\n WNATIVE[chainId].symbol\n }`,\n })\n } catch (error) {\n console.error('Could not deposit', error)\n }\n }\n : undefined,\n inputError: sufficientBalance\n ? undefined\n : hasInputAmount\n ? `Insufficient ${NATIVE[chainId].symbol} balance`\n : `Enter ${NATIVE[chainId].symbol} amount`,\n }\n } else if (weth.equals(inputCurrency) && outputCurrency.isNative) {\n return {\n wrapType: WrapType.UNWRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await wethContract.withdraw(`0x${inputAmount.quotient.toString(16)}`)\n addTransaction(txReceipt, {\n summary: `Unwrap ${inputAmount.toSignificant(6)} ${WNATIVE[chainId].symbol} to ${\n NATIVE[chainId].symbol\n }`,\n })\n } catch (error) {\n console.error('Could not withdraw', error)\n }\n }\n : undefined,\n inputError: sufficientBalance\n ? undefined\n : hasInputAmount\n ? `Insufficient ${WNATIVE[chainId].symbol} balance`\n : `Enter ${WNATIVE[chainId].symbol} amount`,\n }\n } else {\n return NOT_APPLICABLE\n }\n }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction])\n}\n","import { Currency, TradeType, Trade as V2Trade } from '@sushiswap/core-sdk'\nimport React, { ReactNode } from 'react'\n\nimport { ButtonError } from '../../../components/Button'\nimport { SwapCallbackError } from './styleds'\nimport { t } from '@lingui/macro'\nimport { useLingui } from '@lingui/react'\n\nexport default function SwapModalFooter({\n trade,\n onConfirm,\n swapErrorMessage,\n disabledConfirm,\n}: {\n trade: V2Trade\n onConfirm: () => void\n swapErrorMessage: ReactNode | undefined\n disabledConfirm: boolean\n}) {\n const { i18n } = useLingui()\n return (\n
\n {/*
\n
\n
{i18n._(t`Price`)}
\n
\n {formatExecutionPrice(trade, showInverted, chainId)}\n setShowInverted(!showInverted)}\n >\n \n \n
\n
\n
\n
\n {trade.tradeType === TradeType.EXACT_INPUT\n ? i18n._(t`Minimum received`)\n : i18n._(t`Maximum sold`)}\n \n
\n
\n {trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4) ?? \"-\"\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4) ?? \"-\"}\n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? trade.outputAmount.currency.symbol\n : trade.inputAmount.currency.symbol}\n \n
\n
\n
\n
\n
\n {i18n._(t`Price Impact`)}\n \n
\n
\n \n
\n
\n
\n
{i18n._(t`Liquidity Provider Fee`)}
\n
\n
\n {realizedLPFee\n ? realizedLPFee?.toSignificant(6) +\n \" \" +\n trade.inputAmount.currency.symbol\n : \"-\"}\n
\n
\n {archerETHTip && (\n
\n
\n
{i18n._(t`Miner Tip`)}
\n
\n
\n {Ether.fromRawAmount(archerETHTip).toFixed(4)} ETH\n
\n
\n )}\n
*/}\n\n \n {i18n._(t`Confirm Swap`)}\n \n\n {swapErrorMessage ? : null}\n
\n )\n}\n","import { ChainId, Currency, CurrencyAmount, Ether, Percent, TradeType, Trade as V2Trade } from '@sushiswap/core-sdk'\nimport React, { useMemo } from 'react'\nimport { RowBetween, RowFixed } from '../../../components/Row'\n\nimport { ANALYTICS_URL } from '../../../constants'\nimport ExternalLink from '../../../components/ExternalLink'\nimport FormattedPriceImpact from './FormattedPriceImpact'\nimport QuestionHelper from '../../../components/QuestionHelper'\nimport SwapRoute from './SwapRoute'\nimport { computeRealizedLPFeePercent } from '../../../functions/prices'\nimport { t } from '@lingui/macro'\nimport { useActiveWeb3React } from '../../../services/web3'\nimport { useLingui } from '@lingui/react'\n\nexport interface AdvancedSwapDetailsProps {\n trade?: V2Trade\n allowedSlippage: Percent\n}\n\nexport function AdvancedSwapDetails({ trade, allowedSlippage }: AdvancedSwapDetailsProps) {\n const { i18n } = useLingui()\n\n const { realizedLPFee, priceImpact } = useMemo(() => {\n if (!trade) return { realizedLPFee: undefined, priceImpact: undefined }\n\n const realizedLpFeePercent = computeRealizedLPFeePercent(trade)\n const realizedLPFee = trade.inputAmount.multiply(realizedLpFeePercent)\n\n const priceImpact = trade.priceImpact.subtract(realizedLpFeePercent)\n\n return { priceImpact, realizedLPFee }\n }, [trade])\n\n return !trade ? null : (\n
\n
\n \n
{i18n._(t`Route`)}
\n \n
\n \n
\n\n \n \n
\n {trade.tradeType === TradeType.EXACT_INPUT ? i18n._(t`Minimum received`) : i18n._(t`Maximum sent`)}\n
\n \n
\n \n
\n {trade.tradeType === TradeType.EXACT_INPUT\n ? `${trade.minimumAmountOut(allowedSlippage).toSignificant(6)} ${trade.outputAmount.currency.symbol}`\n : `${trade.maximumAmountIn(allowedSlippage).toSignificant(6)} ${trade.inputAmount.currency.symbol}`}\n
\n
\n
\n \n \n
{i18n._(t`Price Impact`)}
\n \n
\n \n
\n\n \n \n
{i18n._(t`Liquidity Provider Fee`)}
\n \n
\n
\n {realizedLPFee\n ? `${realizedLPFee.divide(6).multiply(5).toSignificant(4)} ${realizedLPFee.currency.symbol}`\n : '-'}\n
\n
\n\n \n \n
{i18n._(t`xSUSHI Fee`)}
\n \n
\n
\n {realizedLPFee ? `${realizedLPFee.divide(6).toSignificant(4)} ${realizedLPFee.currency.symbol}` : '-'}\n
\n
\n\n \n \n
{i18n._(t`Slippage tolerance`)}
\n \n
\n
{allowedSlippage.toFixed(2)}%
\n
\n
\n )\n}\n","import { Currency, Price } from '@sushiswap/core-sdk'\nimport React, { useCallback } from 'react'\n\nimport Typography from '../../../components/Typography'\nimport { classNames } from '../../../functions'\nimport { t } from '@lingui/macro'\nimport { useLingui } from '@lingui/react'\n\ninterface TradePriceProps {\n price: Price\n showInverted: boolean\n setShowInverted: (showInverted: boolean) => void\n className?: string\n}\n\nexport default function TradePrice({ price, showInverted, setShowInverted, className }: TradePriceProps) {\n const { i18n } = useLingui()\n\n let formattedPrice: string\n\n try {\n formattedPrice = showInverted ? price.toSignificant(4) : price.invert()?.toSignificant(4)\n } catch (error) {\n formattedPrice = '0'\n }\n\n const label = showInverted ? `${price.quoteCurrency?.symbol}` : `${price.baseCurrency?.symbol} `\n\n const labelInverted = showInverted ? `${price.baseCurrency?.symbol} ` : `${price.quoteCurrency?.symbol}`\n\n const flipPrice = useCallback(() => setShowInverted(!showInverted), [setShowInverted, showInverted])\n\n const text = `${'1 ' + labelInverted + ' = ' + formattedPrice ?? '-'} ${label}`\n\n return (\n \n \n {i18n._(t`Exchange Rate`)}\n \n
\n \n {text}\n \n \n \n \n
\n \n )\n}\n","import { AlertTriangle, ArrowDown } from 'react-feather'\nimport { Currency, Percent, TradeType, Trade as V2Trade } from '@sushiswap/core-sdk'\nimport React, { useState } from 'react'\nimport { isAddress, shortenAddress } from '../../../functions'\n\nimport { AdvancedSwapDetails } from './AdvancedSwapDetails'\nimport Card from '../../../components/Card'\nimport CurrencyLogo from '../../../components/CurrencyLogo'\nimport { Field } from '../../../state/swap/actions'\nimport { RowBetween } from '../../../components/Row'\nimport TradePrice from './TradePrice'\nimport Typography from '../../../components/Typography'\nimport { t } from '@lingui/macro'\nimport { useActiveWeb3React } from '../../../services/web3'\nimport { useLingui } from '@lingui/react'\nimport { useUSDCValue } from '../../../hooks/useUSDCPrice'\nimport { warningSeverity } from '../../../functions'\n\nexport default function SwapModalHeader({\n trade,\n allowedSlippage,\n recipient,\n showAcceptChanges,\n onAcceptChanges,\n}: {\n trade: V2Trade\n allowedSlippage: Percent\n recipient: string | null\n showAcceptChanges: boolean\n onAcceptChanges: () => void\n}) {\n const { i18n } = useLingui()\n\n const [showInverted, setShowInverted] = useState(false)\n\n const fiatValueInput = useUSDCValue(trade.inputAmount)\n const fiatValueOutput = useUSDCValue(trade.outputAmount)\n\n const priceImpactSeverity = warningSeverity(trade.priceImpact)\n\n return (\n
\n
\n
\n
\n \n
\n {trade.inputAmount.toSignificant(6)}\n
\n
\n
{trade.inputAmount.currency.symbol}
\n
\n
\n \n
\n
\n
\n \n 2 ? 'text-red' : 'text-high-emphesis'\n }`}\n >\n {trade.outputAmount.toSignificant(6)}\n
\n
\n
{trade.outputAmount.currency.symbol}
\n
\n
\n\n \n\n \n\n {showAcceptChanges ? (\n
\n
\n
\n \n
\n {i18n._(t`Price Updated`)}\n
\n \n {i18n._(t`Accept`)}\n \n
\n ) : null}\n
\n {trade.tradeType === TradeType.EXACT_INPUT ? (\n <>\n {i18n._(t`Output is estimated. You will receive at least`)}{' '}\n \n {trade.minimumAmountOut(allowedSlippage).toSignificant(6)} {trade.outputAmount.currency.symbol}\n {' '}\n {i18n._(t`or the transaction will revert.`)}\n \n ) : (\n <>\n {i18n._(t`Input is estimated. You will sell at most`)}{' '}\n \n {trade.maximumAmountIn(allowedSlippage).toSignificant(6)} {trade.inputAmount.currency.symbol}\n {' '}\n {i18n._(t`or the transaction will revert.`)}\n \n )}\n
\n\n {recipient !== null ? (\n
\n <>\n {i18n._(t`Output will be sent to`)}{' '}\n {isAddress(recipient) ? shortenAddress(recipient) : recipient}\n \n
\n ) : null}\n \n )\n}\n","import { ChainId, Currency, CurrencyAmount, Ether, Percent, TradeType, Trade as V2Trade } from '@sushiswap/core-sdk'\nimport React, { useCallback, useMemo } from 'react'\nimport TransactionConfirmationModal, {\n ConfirmationModalContent,\n TransactionErrorContent,\n} from '../../../modals/TransactionConfirmationModal'\n\nimport SwapModalFooter from './SwapModalFooter'\nimport SwapModalHeader from './SwapModalHeader'\n\n/**\n * Returns true if the trade requires a confirmation of details before we can submit it\n * @param args either a pair of V2 trades or a pair of V3 trades\n */\nfunction tradeMeaningfullyDiffers(\n ...args: [V2Trade, V2Trade]\n): boolean {\n const [tradeA, tradeB] = args\n return (\n tradeA.tradeType !== tradeB.tradeType ||\n !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) ||\n !tradeA.inputAmount.equalTo(tradeB.inputAmount) ||\n !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency) ||\n !tradeA.outputAmount.equalTo(tradeB.outputAmount)\n )\n}\n\nexport default function ConfirmSwapModal({\n trade,\n originalTrade,\n onAcceptChanges,\n allowedSlippage,\n onConfirm,\n onDismiss,\n recipient,\n swapErrorMessage,\n isOpen,\n attemptingTxn,\n txHash,\n}: {\n isOpen: boolean\n trade: V2Trade | undefined\n originalTrade: V2Trade | undefined\n attemptingTxn: boolean\n txHash: string | undefined\n recipient: string | null\n allowedSlippage: Percent\n onAcceptChanges: () => void\n onConfirm: () => void\n swapErrorMessage: string | undefined\n onDismiss: () => void\n}) {\n const showAcceptChanges = useMemo(\n () => Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)),\n [originalTrade, trade]\n )\n\n const modalHeader = useCallback(() => {\n return trade ? (\n \n ) : null\n }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade])\n\n const modalBottom = useCallback(() => {\n return trade ? (\n \n ) : null\n }, [onConfirm, showAcceptChanges, swapErrorMessage, trade])\n\n // text to show while loading\n const pendingText = `Swapping ${trade?.inputAmount?.toSignificant(6)} ${\n trade?.inputAmount?.currency?.symbol\n } for ${trade?.outputAmount?.toSignificant(6)} ${trade?.outputAmount?.currency?.symbol}`\n\n const confirmationContent = useCallback(\n () =>\n swapErrorMessage ? (\n \n ) : (\n \n ),\n [onDismiss, modalBottom, modalHeader, swapErrorMessage]\n )\n\n return (\n \n )\n}\n","import { BigintIsh, Currency, CurrencyAmount, JSBI } from '@sushiswap/core-sdk'\n\nimport { Interface } from '@ethersproject/abi'\n\nexport function toHex(bigintIsh: BigintIsh) {\n const bigInt = JSBI.BigInt(bigintIsh)\n let hex = bigInt.toString(16)\n if (hex.length % 2 !== 0) {\n hex = `0${hex}`\n }\n return `0x${hex}`\n}\n\nconst ERC20_INTERFACE = new Interface([\n {\n constant: false,\n inputs: [\n { name: '_spender', type: 'address' },\n { name: '_value', type: 'uint256' },\n ],\n name: 'approve',\n outputs: [{ name: '', type: 'bool' }],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n])\n\nexport default function approveAmountCalldata(\n amount: CurrencyAmount,\n spender: string\n): { to: string; data: string; value: '0x0' } {\n if (!amount.currency.isToken) throw new Error('Must call with an amount of token')\n const approveData = ERC20_INTERFACE.encodeFunctionData('approve', [spender, toHex(amount.quotient)])\n return {\n to: amount.currency.address,\n data: approveData,\n value: '0x0',\n }\n}\n","import { EIP_1559_ACTIVATION_BLOCK } from '../constants'\nimport { ChainId, Currency, Percent, Router, TradeType, Trade as V2Trade } from '@sushiswap/core-sdk'\nimport { isAddress, isZero } from '../functions/validate'\nimport { useRouterContract } from './useContract'\nimport { BigNumber } from '@ethersproject/bignumber'\nimport { SignatureData } from './useERC20Permit'\nimport approveAmountCalldata from '../functions/approveAmountCalldata'\nimport { calculateGasMargin } from '../functions/trade'\nimport { shortenAddress } from '../functions/format'\nimport { t } from '@lingui/macro'\nimport { useActiveWeb3React } from '../services/web3'\nimport { useArgentWalletContract } from './useArgentWalletContract'\nimport { useBlockNumber } from '../state/application/hooks'\nimport useENS from './useENS'\nimport { useMemo } from 'react'\nimport { useTransactionAdder } from '../state/transactions/hooks'\nimport useTransactionDeadline from './useTransactionDeadline'\n\nexport enum SwapCallbackState {\n INVALID,\n LOADING,\n VALID,\n}\n\ninterface SwapCall {\n address: string\n calldata: string\n value: string\n}\n\ninterface SwapCallEstimate {\n call: SwapCall\n}\n\nexport interface SuccessfulCall extends SwapCallEstimate {\n call: SwapCall\n gasEstimate: BigNumber\n}\n\ninterface FailedCall extends SwapCallEstimate {\n call: SwapCall\n error: Error\n}\n\nexport type EstimatedSwapCall = SuccessfulCall | FailedCall\n\n/**\n * Returns the swap calls that can be used to make the trade\n * @param trade trade to execute\n * @param allowedSlippage user allowed slippage\n * @param recipientAddressOrName the ENS name or address of the recipient of the swap output\n * @param signatureData the signature data of the permit of the input token amount, if available\n */\nexport function useSwapCallArguments(\n trade: V2Trade | undefined, // trade to execute, required\n allowedSlippage: Percent, // in bips\n recipientAddressOrName: string | null, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender\n signatureData: SignatureData | null | undefined\n): SwapCall[] {\n const { account, chainId, library } = useActiveWeb3React()\n\n const { address: recipientAddress } = useENS(recipientAddressOrName)\n const recipient = recipientAddressOrName === null ? account : recipientAddress\n const deadline = useTransactionDeadline()\n\n const routerContract = useRouterContract()\n\n const argentWalletContract = useArgentWalletContract()\n\n return useMemo(() => {\n if (!trade || !recipient || !library || !account || !chainId || !deadline) return []\n\n if (trade instanceof V2Trade) {\n if (!routerContract) return []\n const swapMethods = []\n swapMethods.push(\n Router.swapCallParameters(trade, {\n feeOnTransfer: false,\n allowedSlippage,\n recipient,\n deadline: deadline.toNumber(),\n })\n )\n\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n swapMethods.push(\n Router.swapCallParameters(trade, {\n feeOnTransfer: true,\n allowedSlippage,\n recipient,\n deadline: deadline.toNumber(),\n })\n )\n }\n return swapMethods.map(({ methodName, args, value }) => {\n if (argentWalletContract && trade.inputAmount.currency.isToken) {\n return {\n address: argentWalletContract.address,\n calldata: argentWalletContract.interface.encodeFunctionData('wc_multiCall', [\n [\n approveAmountCalldata(trade.maximumAmountIn(allowedSlippage), routerContract.address),\n {\n to: routerContract.address,\n value: value,\n data: routerContract.interface.encodeFunctionData(methodName, args),\n },\n ],\n ]),\n value: '0x0',\n }\n } else {\n // console.log({ methodName, args })\n return {\n address: routerContract.address,\n calldata: routerContract.interface.encodeFunctionData(methodName, args),\n value,\n }\n }\n })\n }\n }, [account, allowedSlippage, argentWalletContract, chainId, deadline, library, recipient, routerContract, trade])\n}\n\n/**\n * This is hacking out the revert reason from the ethers provider thrown error however it can.\n * This object seems to be undocumented by ethers.\n * @param error an error from the ethers provider\n */\nexport function swapErrorToUserReadableMessage(error: any): string {\n let reason: string | undefined\n\n while (Boolean(error)) {\n reason = error.reason ?? error.message ?? reason\n error = error.error ?? error.data?.originalError\n }\n\n if (reason?.indexOf('execution reverted: ') === 0) reason = reason.substr('execution reverted: '.length)\n\n switch (reason) {\n case 'UniswapV2Router: EXPIRED':\n return t`The transaction could not be sent because the deadline has passed. Please check that your transaction deadline is not too low.`\n case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT':\n case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT':\n return t`This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.`\n case 'TransferHelper: TRANSFER_FROM_FAILED':\n return t`The input token cannot be transferred. There may be an issue with the input token.`\n case 'UniswapV2: TRANSFER_FAILED':\n return t`The output token cannot be transferred. There may be an issue with the output token.`\n case 'UniswapV2: K':\n return t`The Uniswap invariant x*y=k was not satisfied by the swap. This usually means one of the tokens you are swapping incorporates custom behavior on transfer.`\n case 'Too little received':\n case 'Too much requested':\n case 'STF':\n return t`This transaction will not succeed due to price movement. Try increasing your slippage tolerance.`\n case 'TF':\n return t`The output token cannot be transferred. There may be an issue with the output token.`\n default:\n if (reason?.indexOf('undefined is not an object') !== -1) {\n console.error(error, reason)\n return t`An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note fee on transfer and rebase tokens are incompatible with Uniswap V3.`\n }\n return t`Unknown error${reason ? `: \"${reason}\"` : ''}. Try increasing your slippage tolerance.`\n }\n}\n\n// returns a function that will execute a swap, if the parameters are all valid\n// and the user has approved the slippage adjusted input amount for the trade\nexport function useSwapCallback(\n trade: V2Trade | undefined, // trade to execute, required\n allowedSlippage: Percent, // in bips\n recipientAddressOrName: string | null, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender\n signatureData: SignatureData | undefined | null\n): {\n state: SwapCallbackState\n callback: null | (() => Promise)\n error: string | null\n} {\n const { account, chainId, library } = useActiveWeb3React()\n\n const blockNumber = useBlockNumber()\n\n const eip1559 =\n EIP_1559_ACTIVATION_BLOCK[chainId] == undefined ? false : blockNumber >= EIP_1559_ACTIVATION_BLOCK[chainId]\n\n const swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData)\n\n // console.log({ swapCalls, trade })\n\n const addTransaction = useTransactionAdder()\n\n const { address: recipientAddress } = useENS(recipientAddressOrName)\n\n const recipient = recipientAddressOrName === null ? account : recipientAddress\n\n return useMemo(() => {\n if (!trade || !library || !account || !chainId) {\n return {\n state: SwapCallbackState.INVALID,\n callback: null,\n error: 'Missing dependencies',\n }\n }\n if (!recipient) {\n if (recipientAddressOrName !== null) {\n return {\n state: SwapCallbackState.INVALID,\n callback: null,\n error: 'Invalid recipient',\n }\n } else {\n return {\n state: SwapCallbackState.LOADING,\n callback: null,\n error: null,\n }\n }\n }\n\n return {\n state: SwapCallbackState.VALID,\n callback: async function onSwap(): Promise {\n const estimatedCalls: SwapCallEstimate[] = await Promise.all(\n swapCalls.map((call) => {\n const { address, calldata, value } = call\n\n const tx =\n !value || isZero(value)\n ? { from: account, to: address, data: calldata }\n : {\n from: account,\n to: address,\n data: calldata,\n value,\n }\n\n // console.log('Estimate gas for valid swap')\n\n // library.getGasPrice().then((gasPrice) => console.log({ gasPrice }))\n\n return library\n .estimateGas(tx)\n .then((gasEstimate) => {\n return {\n call,\n gasEstimate,\n }\n })\n .catch((gasError) => {\n console.debug('Gas estimate failed, trying eth_call to extract error', call)\n\n return library\n .call(tx)\n .then((result) => {\n console.debug('Unexpected successful call after failed estimate gas', call, gasError, result)\n return {\n call,\n error: new Error('Unexpected issue with estimating the gas. Please try again.'),\n }\n })\n .catch((callError) => {\n console.debug('Call threw error', call, callError)\n return {\n call,\n error: new Error(swapErrorToUserReadableMessage(callError)),\n }\n })\n })\n })\n )\n\n // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate\n let bestCallOption: SuccessfulCall | SwapCallEstimate | undefined = estimatedCalls.find(\n (el, ix, list): el is SuccessfulCall =>\n 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1])\n )\n\n // check if any calls errored with a recognizable error\n if (!bestCallOption) {\n const errorCalls = estimatedCalls.filter((call): call is FailedCall => 'error' in call)\n if (errorCalls.length > 0) throw errorCalls[errorCalls.length - 1].error\n const firstNoErrorCall = estimatedCalls.find(\n (call): call is SwapCallEstimate => !('error' in call)\n )\n if (!firstNoErrorCall) throw new Error('Unexpected error. Could not estimate gas for the swap.')\n bestCallOption = firstNoErrorCall\n }\n\n const {\n call: { address, calldata, value },\n } = bestCallOption\n\n // console.log({ bestCallOption })\n\n return library\n .getSigner()\n .sendTransaction({\n from: account,\n to: address,\n data: calldata,\n // let the wallet try if we can't estimate the gas\n ...('gasEstimate' in bestCallOption ? { gasLimit: calculateGasMargin(bestCallOption.gasEstimate) } : {}),\n gasPrice: !eip1559 && chainId === ChainId.HARMONY ? BigNumber.from('2000000000') : undefined,\n ...(value && !isZero(value) ? { value } : {}),\n })\n .then((response) => {\n const inputSymbol = trade.inputAmount.currency.symbol\n const outputSymbol = trade.outputAmount.currency.symbol\n const inputAmount = trade.inputAmount.toSignificant(4)\n const outputAmount = trade.outputAmount.toSignificant(4)\n\n const base = `Swap ${inputAmount} ${inputSymbol} for ${outputAmount} ${outputSymbol}`\n const withRecipient =\n recipient === account\n ? base\n : `${base} to ${\n recipientAddressOrName && isAddress(recipientAddressOrName)\n ? shortenAddress(recipientAddressOrName)\n : recipientAddressOrName\n }`\n\n addTransaction(response, {\n summary: withRecipient,\n })\n\n return response.hash\n })\n .catch((error) => {\n // if the user rejected the tx, pass this along\n if (error?.code === 4001) {\n throw new Error('Transaction rejected.')\n } else {\n // otherwise, the error was unexpected and we need to convey that\n console.error(`Swap failed`, error, address, calldata, value)\n\n throw new Error(`Swap failed: ${swapErrorToUserReadableMessage(error)}`)\n }\n })\n },\n error: null,\n }\n }, [trade, library, account, chainId, recipient, recipientAddressOrName, swapCalls, eip1559, addTransaction])\n}\n","import ARGENT_WALLET_ABI from '../constants/abis/argent-wallet.json'\nimport { Contract } from '@ethersproject/contracts'\nimport { useActiveWeb3React } from '../services/web3'\nimport { useContract } from './useContract'\nimport useIsArgentWallet from './useIsArgentWallet'\n\nexport function useArgentWalletContract(): Contract | null {\n const { account } = useActiveWeb3React()\n const isArgentWallet = useIsArgentWallet()\n return useContract(isArgentWallet ? account ?? undefined : undefined, ARGENT_WALLET_ABI, true)\n}\n","import React, { useCallback, useState } from 'react'\nimport { FC } from 'react'\nimport { useActiveWeb3React } from '../../services/web3'\nimport { ChainId } from '@sushiswap/core-sdk'\nimport Button from '../Button'\nimport { classNames } from '../../functions'\nimport { Transition } from '@headlessui/react'\nimport { ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/solid'\n\nconst images = [\n {\n image: `url('/images/miso/banner-gene.png')`,\n url: 'https://miso.sushi.com/auctions/0xA017E4Cf380c5FDc372463f3330853500b4B3Cb9',\n },\n]\n\nconst Banner: FC = () => {\n const { chainId } = useActiveWeb3React()\n const [slideIndex, setSlideIndex] = useState(Math.floor(Math.random() * images.length))\n\n const nextSlide = useCallback(() => {\n setSlideIndex((prevState) => (prevState + 1) % images.length)\n }, [])\n\n const prevSlide = useCallback(() => {\n setSlideIndex((prevState) => (prevState - 1 + images.length) % images.length)\n }, [])\n\n if (chainId !== ChainId.ETHEREUM) return <>\n\n const slides = images.map(({ image, url }, index) => {\n return (\n \n \n \n
\n \n \n
\n )\n })\n\n return (\n
\n
\n {slides}\n {images.length > 1 && (\n
\n \n \n
\n )}\n
\n
\n )\n}\n\nexport default Banner\n","import { ChainId, Currency, CurrencyAmount, JSBI, Token, TradeType, Trade as V2Trade } from '@sushiswap/core-sdk'\nimport { ApprovalState, useApproveCallbackFromTrade } from '../../../hooks/useApproveCallback'\nimport { BottomGrouping, SwapCallbackError } from '../../../features/legacy/swap/styleds'\nimport { ButtonConfirmed, ButtonError } from '../../../components/Button'\nimport Column, { AutoColumn } from '../../../components/Column'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { UseERC20PermitState, useERC20PermitFromTrade } from '../../../hooks/useERC20Permit'\nimport { useAllTokens, useCurrency } from '../../../hooks/Tokens'\nimport {\n useDefaultsFromURLSearch,\n useDerivedSwapInfo,\n useSwapActionHandlers,\n useSwapState,\n} from '../../../state/swap/hooks'\nimport {\n useExpertModeManager,\n useUserSingleHopOnly,\n useUserSlippageTolerance,\n useUserTransactionTTL,\n} from '../../../state/user/hooks'\nimport { useNetworkModalToggle, useToggleSettingsMenu, useWalletModalToggle } from '../../../state/application/hooks'\nimport useWrapCallback, { WrapType } from '../../../hooks/useWrapCallback'\n\nimport AddressInputPanel from '../../../components/AddressInputPanel'\nimport Alert from '../../../components/Alert'\nimport Button from '../../../components/Button'\nimport ConfirmSwapModal from '../../../features/legacy/swap/ConfirmSwapModal'\nimport Container from '../../../components/Container'\nimport CurrencyInputPanel from '../../../components/CurrencyInputPanel'\nimport DoubleGlowShadow from '../../../components/DoubleGlowShadow'\nimport { Field } from '../../../state/swap/actions'\nimport Head from 'next/head'\nimport Loader from '../../../components/Loader'\nimport Lottie from 'lottie-react'\nimport ProgressSteps from '../../../components/ProgressSteps'\nimport ReactGA from 'react-ga'\nimport SwapHeader from '../../../features/trade/Header'\nimport TokenWarningModal from '../../../modals/TokenWarningModal'\nimport TradePrice from '../../../features/legacy/swap/TradePrice'\nimport Typography from '../../../components/Typography'\nimport UnsupportedCurrencyFooter from '../../../features/legacy/swap/UnsupportedCurrencyFooter'\nimport Web3Connect from '../../../components/Web3Connect'\nimport { classNames } from '../../../functions'\nimport { computeFiatValuePriceImpact } from '../../../functions/trade'\nimport confirmPriceImpactWithoutFee from '../../../features/legacy/swap/confirmPriceImpactWithoutFee'\nimport { maxAmountSpend } from '../../../functions/currency'\nimport swapArrowsAnimationData from '../../../animation/swap-arrows.json'\nimport { t } from '@lingui/macro'\nimport { useActiveWeb3React } from '../../../services/web3'\nimport useENSAddress from '../../../hooks/useENSAddress'\nimport useIsArgentWallet from '../../../hooks/useIsArgentWallet'\nimport { useIsSwapUnsupported } from '../../../hooks/useIsSwapUnsupported'\nimport { useLingui } from '@lingui/react'\nimport usePrevious from '../../../hooks/usePrevious'\nimport { useRouter } from 'next/router'\nimport { useSwapCallback } from '../../../hooks/useSwapCallback'\nimport { useUSDCValue } from '../../../hooks/useUSDCPrice'\nimport { warningSeverity } from '../../../functions/prices'\n\nimport Image from 'next/image'\nimport Banner from '../../../components/Banner'\n\nexport default function Swap() {\n const { i18n } = useLingui()\n\n const loadedUrlParams = useDefaultsFromURLSearch()\n\n // token warning stuff\n const [loadedInputCurrency, loadedOutputCurrency] = [\n useCurrency(loadedUrlParams?.inputCurrencyId),\n useCurrency(loadedUrlParams?.outputCurrencyId),\n ]\n\n const [dismissTokenWarning, setDismissTokenWarning] = useState(false)\n const urlLoadedTokens: Token[] = useMemo(\n () => [loadedInputCurrency, loadedOutputCurrency]?.filter((c): c is Token => c?.isToken ?? false) ?? [],\n [loadedInputCurrency, loadedOutputCurrency]\n )\n const handleConfirmTokenWarning = useCallback(() => {\n setDismissTokenWarning(true)\n }, [])\n\n // dismiss warning if all imported tokens are in active lists\n const defaultTokens = useAllTokens()\n const importTokensNotInDefault =\n urlLoadedTokens &&\n urlLoadedTokens.filter((token: Token) => {\n return !Boolean(token.address in defaultTokens)\n })\n\n const { account, chainId } = useActiveWeb3React()\n\n const toggleNetworkModal = useNetworkModalToggle()\n\n const router = useRouter()\n\n // toggle wallet when disconnected\n const toggleWalletModal = useWalletModalToggle()\n\n // for expert mode\n const [isExpertMode] = useExpertModeManager()\n const toggleSettings = useToggleSettingsMenu()\n\n // get custom setting values for user\n const [ttl] = useUserTransactionTTL()\n\n // swap state\n const { independentField, typedValue, recipient } = useSwapState()\n const {\n v2Trade,\n currencyBalances,\n parsedAmount,\n currencies,\n inputError: swapInputError,\n allowedSlippage,\n } = useDerivedSwapInfo()\n\n const {\n wrapType,\n execute: onWrap,\n inputError: wrapInputError,\n } = useWrapCallback(currencies[Field.INPUT], currencies[Field.OUTPUT], typedValue)\n const showWrap: boolean = wrapType !== WrapType.NOT_APPLICABLE\n const { address: recipientAddress } = useENSAddress(recipient)\n\n const trade = showWrap ? undefined : v2Trade\n\n const parsedAmounts = useMemo(\n () =>\n showWrap\n ? {\n [Field.INPUT]: parsedAmount,\n [Field.OUTPUT]: parsedAmount,\n }\n : {\n [Field.INPUT]: independentField === Field.INPUT ? parsedAmount : trade?.inputAmount,\n [Field.OUTPUT]: independentField === Field.OUTPUT ? parsedAmount : trade?.outputAmount,\n },\n [independentField, parsedAmount, showWrap, trade]\n )\n\n const fiatValueInput = useUSDCValue(parsedAmounts[Field.INPUT])\n const fiatValueOutput = useUSDCValue(parsedAmounts[Field.OUTPUT])\n const priceImpact = computeFiatValuePriceImpact(fiatValueInput, fiatValueOutput)\n\n const { onSwitchTokens, onCurrencySelection, onUserInput, onChangeRecipient } = useSwapActionHandlers()\n\n const isValid = !swapInputError\n\n const dependentField: Field = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT\n\n const handleTypeInput = useCallback(\n (value: string) => {\n onUserInput(Field.INPUT, value)\n },\n [onUserInput]\n )\n\n const handleTypeOutput = useCallback(\n (value: string) => {\n onUserInput(Field.OUTPUT, value)\n },\n [onUserInput]\n )\n\n // reset if they close warning without tokens in params\n const handleDismissTokenWarning = useCallback(() => {\n setDismissTokenWarning(true)\n router.push('/swap/')\n }, [router])\n\n // modal and loading\n const [{ showConfirm, tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{\n showConfirm: boolean\n tradeToConfirm: V2Trade | undefined\n attemptingTxn: boolean\n swapErrorMessage: string | undefined\n txHash: string | undefined\n }>({\n showConfirm: false,\n tradeToConfirm: undefined,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n\n const formattedAmounts = {\n [independentField]: typedValue,\n [dependentField]: showWrap\n ? parsedAmounts[independentField]?.toExact() ?? ''\n : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n }\n\n const userHasSpecifiedInputOutput = Boolean(\n currencies[Field.INPUT] && currencies[Field.OUTPUT] && parsedAmounts[independentField]?.greaterThan(JSBI.BigInt(0))\n )\n\n const routeNotFound = !trade?.route\n\n // check whether the user has approved the router on the input token\n const [approvalState, approveCallback] = useApproveCallbackFromTrade(trade, allowedSlippage)\n\n const signatureData = undefined\n\n // const {\n // state: signatureState,\n // signatureData,\n // gatherPermitSignature,\n // } = useERC20PermitFromTrade(trade, allowedSlippage)\n\n const handleApprove = useCallback(async () => {\n await approveCallback()\n // if (signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature) {\n // try {\n // await gatherPermitSignature()\n // } catch (error) {\n // // try to approve if gatherPermitSignature failed for any reason other than the user rejecting it\n // if (error?.code !== 4001) {\n // await approveCallback()\n // }\n // }\n // } else {\n // await approveCallback()\n // }\n }, [approveCallback])\n // }, [approveCallback, gatherPermitSignature, signatureState])\n\n // check if user has gone through approval process, used to show two step buttons, reset on token change\n const [approvalSubmitted, setApprovalSubmitted] = useState(false)\n\n // mark when a user has submitted an approval, reset onTokenSelection for input field\n useEffect(() => {\n if (approvalState === ApprovalState.PENDING) {\n setApprovalSubmitted(true)\n }\n }, [approvalState, approvalSubmitted])\n\n const maxInputAmount: CurrencyAmount | undefined = maxAmountSpend(currencyBalances[Field.INPUT])\n const showMaxButton = Boolean(maxInputAmount?.greaterThan(0) && !parsedAmounts[Field.INPUT]?.equalTo(maxInputAmount))\n\n // the callback to execute the swap\n const { callback: swapCallback, error: swapCallbackError } = useSwapCallback(\n trade,\n allowedSlippage,\n recipient,\n signatureData\n )\n\n const [singleHopOnly] = useUserSingleHopOnly()\n\n const handleSwap = useCallback(() => {\n if (!swapCallback) {\n return\n }\n if (priceImpact && !confirmPriceImpactWithoutFee(priceImpact)) {\n return\n }\n setSwapState({\n attemptingTxn: true,\n tradeToConfirm,\n showConfirm,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n swapCallback()\n .then((hash) => {\n setSwapState({\n attemptingTxn: false,\n tradeToConfirm,\n showConfirm,\n swapErrorMessage: undefined,\n txHash: hash,\n })\n\n ReactGA.event({\n category: 'Swap',\n action:\n recipient === null\n ? 'Swap w/o Send'\n : (recipientAddress ?? recipient) === account\n ? 'Swap w/o Send + recipient'\n : 'Swap w/ Send',\n label: [\n trade?.inputAmount?.currency?.symbol,\n trade?.outputAmount?.currency?.symbol,\n singleHopOnly ? 'SH' : 'MH',\n ].join('/'),\n })\n\n ReactGA.event({\n category: 'Routing',\n action: singleHopOnly ? 'Swap with multihop disabled' : 'Swap with multihop enabled',\n })\n })\n .catch((error) => {\n setSwapState({\n attemptingTxn: false,\n tradeToConfirm,\n showConfirm,\n swapErrorMessage: error.message,\n txHash: undefined,\n })\n })\n }, [\n swapCallback,\n priceImpact,\n tradeToConfirm,\n showConfirm,\n recipient,\n recipientAddress,\n account,\n trade?.inputAmount?.currency?.symbol,\n trade?.outputAmount?.currency?.symbol,\n singleHopOnly,\n ])\n\n // errors\n const [showInverted, setShowInverted] = useState(false)\n\n // warnings on slippage\n // const priceImpactSeverity = warningSeverity(priceImpactWithoutFee);\n const priceImpactSeverity = useMemo(() => {\n const executionPriceImpact = trade?.priceImpact\n return warningSeverity(\n executionPriceImpact && priceImpact\n ? executionPriceImpact.greaterThan(priceImpact)\n ? executionPriceImpact\n : priceImpact\n : executionPriceImpact ?? priceImpact\n )\n }, [priceImpact, trade])\n\n const isArgentWallet = useIsArgentWallet()\n\n // show approve flow when: no error on inputs, not approved or pending, or approved in current session\n // never show if price impact is above threshold in non expert mode\n const showApproveFlow =\n !isArgentWallet &&\n !swapInputError &&\n (approvalState === ApprovalState.NOT_APPROVED ||\n approvalState === ApprovalState.PENDING ||\n (approvalSubmitted && approvalState === ApprovalState.APPROVED)) &&\n !(priceImpactSeverity > 3 && !isExpertMode)\n\n const handleConfirmDismiss = useCallback(() => {\n setSwapState({\n showConfirm: false,\n tradeToConfirm,\n attemptingTxn,\n swapErrorMessage,\n txHash,\n })\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.INPUT, '')\n }\n }, [attemptingTxn, onUserInput, swapErrorMessage, tradeToConfirm, txHash])\n\n const handleAcceptChanges = useCallback(() => {\n setSwapState({\n tradeToConfirm: trade,\n swapErrorMessage,\n txHash,\n attemptingTxn,\n showConfirm,\n })\n }, [attemptingTxn, showConfirm, swapErrorMessage, trade, txHash])\n\n const handleInputSelect = useCallback(\n (inputCurrency) => {\n setApprovalSubmitted(false) // reset 2 step UI for approvals\n onCurrencySelection(Field.INPUT, inputCurrency)\n },\n [onCurrencySelection]\n )\n\n const handleMaxInput = useCallback(() => {\n maxInputAmount && onUserInput(Field.INPUT, maxInputAmount.toExact())\n }, [maxInputAmount, onUserInput])\n\n const handleOutputSelect = useCallback(\n (outputCurrency) => onCurrencySelection(Field.OUTPUT, outputCurrency),\n [onCurrencySelection]\n )\n\n const swapIsUnsupported = useIsSwapUnsupported(currencies?.INPUT, currencies?.OUTPUT)\n\n const priceImpactTooHigh = priceImpactSeverity > 3 && !isExpertMode\n\n const [animateSwapArrows, setAnimateSwapArrows] = useState(false)\n\n return (\n \n \n {i18n._(t`SushiSwap`)} | Sushi\n \n \n 0 && !dismissTokenWarning}\n tokens={importTokensNotInDefault}\n onConfirm={handleConfirmTokenWarning}\n />\n \n
\n \n\n \n
\n \n \n \n {\n setApprovalSubmitted(false) // reset 2 step UI for approvals\n onSwitchTokens()\n }}\n >\n
\n setAnimateSwapArrows(true)}\n onMouseLeave={() => setAnimateSwapArrows(false)}\n >\n \n
\n
\n \n {isExpertMode ? (\n recipient === null && !showWrap ? (\n \n ) : (\n onChangeRecipient(null)}\n >\n - {i18n._(t`Remove recipient`)}\n \n )\n ) : null}\n
\n \n\n
\n \n {Boolean(trade) && (\n
\n \n
\n )}\n
\n \n\n {recipient !== null && !showWrap && (\n <>\n \n {recipient !== account && (\n \n )}\n \n )}\n\n {/* {showWrap ? null : (\n \n
{doArcher && userHasSpecifiedInputOutput && }
\n \n )} */}\n {/*\n {trade && (\n
\n \n
\n )} */}\n\n \n {swapIsUnsupported ? (\n \n ) : !account ? (\n \n ) : showWrap ? (\n \n ) : routeNotFound && userHasSpecifiedInputOutput ? (\n
\n
{i18n._(t`Insufficient liquidity for this trade`)}
\n {singleHopOnly &&
{i18n._(t`Try enabling multi-hop trades`)}
}\n
\n ) : showApproveFlow ? (\n
\n {approvalState !== ApprovalState.APPROVED && (\n \n {approvalState === ApprovalState.PENDING ? (\n
\n
Approving
\n \n
\n ) : (\n i18n._(t`Approve ${currencies[Field.INPUT]?.symbol}`)\n )}\n \n )}\n {approvalState === ApprovalState.APPROVED && (\n {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n showConfirm: true,\n txHash: undefined,\n })\n }\n }}\n style={{\n width: '100%',\n }}\n id=\"swap-button\"\n disabled={\n !isValid || approvalState !== ApprovalState.APPROVED || (priceImpactSeverity > 3 && !isExpertMode)\n }\n error={isValid && priceImpactSeverity > 2}\n >\n {priceImpactSeverity > 3 && !isExpertMode\n ? i18n._(t`Price Impact High`)\n : priceImpactSeverity > 2\n ? i18n._(t`Swap Anyway`)\n : i18n._(t`Swap`)}\n \n )}\n
\n ) : (\n {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n showConfirm: true,\n txHash: undefined,\n })\n }\n }}\n id=\"swap-button\"\n disabled={!isValid || (priceImpactSeverity > 3 && !isExpertMode) || !!swapCallbackError}\n error={isValid && priceImpactSeverity > 2 && !swapCallbackError}\n >\n {swapInputError\n ? swapInputError\n : priceImpactSeverity > 3 && !isExpertMode\n ? i18n._(t`Price Impact Too High`)\n : priceImpactSeverity > 2\n ? i18n._(t`Swap Anyway`)\n : i18n._(t`Swap`)}\n \n )}\n {showApproveFlow && (\n \n \n \n )}\n {isExpertMode && swapErrorMessage ? : null}\n
\n {/* {!swapIsUnsupported ? (\n \n ) : (\n \n )} */}\n\n {!swapIsUnsupported ? null : (\n \n )}\n \n \n
\n
\n )\n}\n","import { ALLOWED_PRICE_IMPACT_HIGH, PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN } from '../../../constants'\n\nimport { Percent } from '@sushiswap/core-sdk'\n\n/**\n * Given the price impact, get user confirmation.\n *\n * @param priceImpactWithoutFee price impact of the trade without the fee.\n */\nexport default function confirmPriceImpactWithoutFee(priceImpactWithoutFee: Percent): boolean {\n if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) {\n return (\n window.prompt(\n `This swap has a price impact of at least ${PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(\n 0\n )}%. Please type the word \"confirm\" to continue with this swap.`\n ) === 'confirm'\n )\n } else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) {\n return window.confirm(\n `This swap has a price impact of at least ${ALLOWED_PRICE_IMPACT_HIGH.toFixed(\n 0\n )}%. Please confirm that you would like to continue with this swap.`\n )\n }\n return true\n}\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/exchange/swap/[[...tokens]]\",\n function () {\n return require(\"private-next-pages/exchange/swap/[[...tokens]].tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/exchange/swap/[[...tokens]]\"])\n });\n }\n "],"names":["id","value","onChange","i18n","useLingui","address","loading","useENS","handleInput","useCallback","event","withoutSpaces","target","replace","error","Boolean","length","className","_","onClick","onUserInput","ProgressCircles","steps","disabled","rest","map","step","i","classNames","SEVERITY","FormattedPriceImpact","priceImpact","warningSeverity","multiply","toFixed","SwapRoute","memo","trade","route","path","token","isLastItem","currency","unwrappedToken","Fragment","symbol","width","height","displayName","useIsArgentWallet","account","useActiveWeb3React","argentWalletDetector","useArgentWalletDetectorContract","inputs","useMemo","undefined","call","useSingleCallResult","NEVER_RELOAD","result","useParsedQueryString","search","location","parse","parseArrays","ignoreQueryPrefix","V2_SWAP_DEFAULT_SLIPPAGE","Percent","ONE_TENTHS_PERCENT","useSwapSlippageTolerance","defaultSlippageTolerance","useUserSlippageToleranceWithDefault","STABLECOIN_AMOUNT_OUT","ChainId","CurrencyAmount","USD","useUSDCPrice","chainId","amountOut","stablecoin","v2USDCTrade","useV2TradeExactOut","maxHops","wrapped","equals","Price","numerator","denominator","midPrice","useUSDCValue","currencyAmount","price","quote","useAllCommonPairs","currencyA","currencyB","allCurrencyCombinations","tokenA","tokenB","bases","BASES_TO_CHECK_TRADES_AGAINST","ADDITIONAL_BASES","basePairs","flatMap","base","otherBase","filter","tokens","t0","t1","customBases","CUSTOM_BASES","customBasesA","customBasesB","find","useAllCurrencyCombinations","allPairs","useV2Pairs","Object","values","PairState","reduce","curr","liquidityToken","useV2TradeExactIn","currencyAmountIn","currencyOut","allowedPairs","Trade","maxNumResults","bestTradeSoFar","currentTrade","isTradeBetter","BETTER_TRADE_LESS_HOPS_THRESHOLD","currencyIn","currencyAmountOut","TokenWarningModal","isOpen","onConfirm","handleDismiss","onDismiss","maxHeight","handleCurrencySelect","styled","clickable","css","BottomGrouping","SwapCallbackError","size","Slider","useSwapState","useAppSelector","state","swap","BAD_RECIPIENT_ADDRESSES","involvesAddress","checksummedAddress","some","V2Trade","pairs","pair","parseCurrencyFromURLParameter","urlParam","valid","isAddress","toUpperCase","parseIndependentFieldURLParameter","toLowerCase","Field","ENS_NAME_REGEX","ADDRESS_REGEX","queryParametersToSwapState","parsedQs","inputCurrency","outputCurrency","eth","WNATIVE_ADDRESS","sushi","SUSHI_ADDRESS","recipient","test","validatedRecipient","currencyId","typedValue","exactAmount","isNaN","parseFloat","independentField","exactField","WrapType","NOT_APPLICABLE","wrapType","SwapModalFooter","swapErrorMessage","disabledConfirm","Button","AdvancedSwapDetails","allowedSlippage","realizedLPFee","realizedLpFeePercent","computeRealizedLPFeePercent","inputAmount","subtract","QuestionHelper","text","Row","tradeType","TradeType","minimumAmountOut","toSignificant","outputAmount","maximumAmountIn","divide","TradePrice","showInverted","setShowInverted","formattedPrice","invert","label","quoteCurrency","baseCurrency","labelInverted","flipPrice","title","Typography","variant","xmlns","fill","viewBox","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","SwapModalHeader","showAcceptChanges","onAcceptChanges","useState","priceImpactSeverity","CurrencyLogo","executionPrice","shortenAddress","ConfirmSwapModal","originalTrade","attemptingTxn","txHash","args","tradeA","tradeB","equalTo","tradeMeaningfullyDiffers","modalHeader","modalBottom","pendingText","confirmationContent","message","topContent","bottomContent","TransactionConfirmationModal","hash","content","currencyToAdd","toHex","bigintIsh","hex","JSBI","toString","ERC20_INTERFACE","Interface","constant","name","type","outputs","payable","stateMutability","approveAmountCalldata","amount","spender","isToken","Error","approveData","encodeFunctionData","quotient","to","data","SwapCallbackState","useSwapCallArguments","recipientAddressOrName","signatureData","library","recipientAddress","deadline","useTransactionDeadline","routerContract","useRouterContract","argentWalletContract","isArgentWallet","useContract","ARGENT_WALLET_ABI","useArgentWalletContract","swapMethods","push","Router","feeOnTransfer","toNumber","methodName","calldata","interface","swapErrorToUserReadableMessage","reason","originalError","indexOf","substr","console","images","image","url","slideIndex","setSlideIndex","Math","floor","random","nextSlide","prevState","prevSlide","slides","index","as","React","show","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","rel","href","style","backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","Swap","loadedUrlParams","dispatch","useAppDispatch","expertMode","useExpertModeManager","setResult","useEffect","parsed","replaceSwapState","field","inputCurrencyId","outputCurrencyId","useDefaultsFromURLSearch","loadedInputCurrency","loadedOutputCurrency","useCurrency","dismissTokenWarning","setDismissTokenWarning","urlLoadedTokens","c","handleConfirmTokenWarning","defaultTokens","useAllTokens","importTokensNotInDefault","router","useNetworkModalToggle","useRouter","isExpertMode","useWalletModalToggle","ttl","useToggleSettingsMenu","useUserTransactionTTL","v2Trade","currencyBalances","parsedAmount","currencies","inputError","swapInputError","doArcher","singleHopOnly","useUserSingleHopOnly","recipientLookup","relevantTokenBalances","useCurrencyBalances","isExactIn","tryParseAmount","bestTradeExactIn","useTradeExactIn","bestTradeExactOut","useTradeExactOut","formattedTo","balanceIn","amountIn","lessThan","useDerivedSwapInfo","execute","onWrap","wrapInputError","wethContract","useWETH9Contract","balance","useCurrencyBalance","addTransaction","useTransactionAdder","weth","WNATIVE","hasInputAmount","greaterThan","sufficientBalance","isNative","WRAP","async","txReceipt","deposit","summary","NATIVE","UNWRAP","withdraw","useWrapCallback","showWrap","useENSAddress","parsedAmounts","fiatValueInput","fiatValueOutput","computeFiatValuePriceImpact","onSwitchTokens","onCurrencySelection","onChangeRecipient","selectCurrency","switchCurrencies","typeInput","setRecipient","useSwapActionHandlers","isValid","dependentField","handleTypeInput","handleTypeOutput","showConfirm","tradeToConfirm","setSwapState","formattedAmounts","toExact","userHasSpecifiedInputOutput","routeNotFound","approvalState","approveCallback","useApproveCallbackFromTrade","handleApprove","approvalSubmitted","setApprovalSubmitted","ApprovalState","maxInputAmount","maxAmountSpend","showMaxButton","callback","swapCallback","swapCallbackError","blockNumber","useBlockNumber","eip1559","EIP_1559_ACTIVATION_BLOCK","swapCalls","VALID","estimatedCalls","Promise","all","tx","isZero","from","estimateGas","then","gasEstimate","catch","gasError","debug","callError","bestCallOption","el","ix","list","errorCalls","firstNoErrorCall","getSigner","sendTransaction","gasLimit","calculateGasMargin","gasPrice","BigNumber","response","inputSymbol","outputSymbol","withRecipient","code","INVALID","LOADING","useSwapCallback","handleSwap","priceImpactWithoutFee","PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN","ALLOWED_PRICE_IMPACT_HIGH","window","confirm","prompt","ReactGA","category","action","join","executionPriceImpact","showApproveFlow","handleConfirmDismiss","handleAcceptChanges","handleInputSelect","handleMaxInput","handleOutputSelect","swapIsUnsupported","useIsSwapUnsupported","INPUT","OUTPUT","animateSwapArrows","setAnimateSwapArrows","Container","DoubleGlowShadow","input","output","CurrencyInputPanel","onMax","fiatValue","onCurrencySelect","otherCurrency","showCommonBases","justify","onMouseEnter","onMouseLeave","animationData","swapArrowsAnimationData","autoplay","loop","hideBalance","AddressInputPanel","Alert","dismissable","showIcon","color","textAlign","Loader","Web3Connect","Column","marginTop","ProgressSteps","UnsupportedCurrencyFooter","__NEXT_P"],"sourceRoot":""}